package com.game.Maze.Renderers;

import java.util.HashMap;

import com.badlogic.gdx.graphics.Texture;

/**
 * Объект, загружающий необходимые текстуры спрайтов для отображения комнаты со стенами 
 *
 */
public class RoomTextureFactory
{
  private HashMap<String, String> m_Textures = new HashMap<String, String>(); 
  
  private final static String[] m_Files =
  {
    "", "room_empty.png",
    "E", "room_E.png",
    "EW", "room_EW.png",
    "N", "room_N.png",
    "NE", "room_NE.png",
    "NEW", "room_NEW.png",
    "NS", "room_NS.png",
    "NES", "room_NES.png",
    "NSW", "room_NSW.png",
    "NESW", "room_NESW.png",
    "NW", "room_NW.png",
    "S", "room_S.png",
    "ES", "room_ES.png",
    "ESW", "room_ESW.png",
    "SW", "room_SW.png",
    "W", "room_W.png" 
  };
  
  // TODO в последствии переделать чтобы грузилась одна картинка
  public RoomTextureFactory()
  {
    for (int i = 0; i < m_Files.length;)
    {
      // Загружаем все текстуры спрайтов комнаты
      m_Textures.put(m_Files[i++], m_Files[i++]);
    }
  }
  
  /**
   * Возвращает текстуру по заданным сторонам света в которых расположены стены.
   * Если текстура не найдена по строке содержащей стороны света,
   * то возвращается null.
   * @param sides строка, содержащая стороны света 
   * @return текстура, либо null если текстура не найдена.
   */
  public Texture texture(String sides)
  {
    Texture texture = null;
    
    if (m_Textures.containsKey(sides))
      texture = new Texture("data/" + m_Textures.get(sides));
    
    return texture;
  }
  
  private static class RoomTextureFactoryHolder
  {
    public static final RoomTextureFactory instance = new RoomTextureFactory();
  }

  public static RoomTextureFactory instance()
  {
    return RoomTextureFactoryHolder.instance;
  }
}
